package UILayer;
import java.util.Scanner;
import controlLayer.*;

/**
 * Brugergrænseflade klasse til UdlejningsKartotek
 * 
 * @author Gruppe 2
 * @version 1.0
 */
public class UdlejningsKartotekUI
{
    // instance variables - replace the example below with your own
    private UdlejningsKartotekCTR udlejningCtr;

    /**
     * Constructor for objekter af klassen UdlejningsKartotekUI
     */
    public UdlejningsKartotekUI()
    {
        udlejningCtr = new UdlejningsKartotekCTR();
    }

    /**
     * En metode der starter Udlejning menu
     */
    public void start()
    {
        udlejningsMenu();
    }

    /**
     * En metode der indeholder funktioner til de forskellige valg i menuen
     */
    public void udlejningsMenu()
    {
        boolean exit = false;
        while(!exit)
        {
            int choice = writeUdlejningsMenu();
            if(choice != 1 && choice != 2 && choice != 4 && choice != 5 && choice != 6)
            {
                System.out.println("Du skal vælge enten 1, 2, 3, 4, 5, eller 6");
            }

            if (choice == 1)
            {
                findUdlejning();
            }

            else{
                if (choice == 2){
                    opretUdlejning();
                }
                else{
                    if(choice == 3){
                        opdaterUdlejning();
                    }
                    else{
                        if(choice == 4){
                            sletUdlejning();
                        }
                        else{
                            if(choice == 5){
                                listAllUdlejning();
                            }
                            else{
                                if(choice == 6)
                                {
                                    exit = true;
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    /**
     * En metode der printer oplysninger om de forskellige valg i menuen
     * @return int choice
     */
    private int writeUdlejningsMenu()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println(" *** Udlejnings menu ***");
        System.out.println(" (1) Vis udlejnings information");
        System.out.println(" (2) Opret udlejning");
        System.out.println(" (3) Opdater udlejning");
        System.out.println(" (4) Slet udlejning");
        System.out.println(" (5) Vis udlejnings register");        
        System.out.println(" (6) Gå til hovedmenu");
        System.out.print("\n Tag dit valg: ");

        int choice = 0;
        boolean ok = false;
        while(!ok)
        {
            try
            {
                choice = keyboard.nextInt();
                ok = true;
            }
            catch (Exception e)
            {
                System.out.println("Skriv kun tal - prøv igen");
                String input = keyboard.nextLine();
            }
        }
        return choice;
    }

    /**
     * En metode til indtastning af udlejningsid. Metoden returnere udlejningsid til brug 
     * i andre metoder
     * @param long id
     * @return long id
     */
    private long inputId()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Skriv udlejningsidet: ");
        long id = 0;
        boolean ok = false;
        while(!ok)
        {
            try
            {
                id = keyboard.nextLong();
                ok = true;
            }
            catch (Exception e)
            {
                System.out.println("Skriv kun tal - prøv igen");
                String input = keyboard.nextLine();
            }
        }
        return id;
    }

    /**
     * En metode til indtastning af udlejnings tidsperiode. Metoden returnere tidsperioden 
     * til brug i andre metoder
     * @param String udlejningsTidsperiode
     * @return String udlejningsTidsperiode
     */
    private String inputUdlejningTidsperiode()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Skriv udlejnings tidsperioden: ");
        String udlejningsTidsperiode = keyboard.nextLine();
        return udlejningsTidsperiode;
    }

    /**
     * En metode til indtastning af udlejnings beskrivelse. Metoden returnere beskrivelsen 
     * til brug i andre metoder
     * @param String udlejningsBeskrivelse
     * @return String udlejningsBeskrivelse
     */
    private String inputUdlejningBeskrivelse()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Skriv udlejnings beskrivelse: ");
        String udlejningsBeskrivelse = keyboard.nextLine();
        return udlejningsBeskrivelse;
    }

    /**
     * En metode til indtastning af udlejnings pris. Metoden returnere pris
     * til brug i andre metoder
     * @param int udlejningsPris
     * @return int udlejningsPris
     */
    private int inputUdlejningsPris()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Skriv udlejnings pris: ");
        int pris = 0;
        boolean ok = false;
        while(!ok)
        {
            try
            {
                pris = keyboard.nextInt();
                ok = true;
            }
            catch (Exception e)
            {
                System.out.println("Skriv kun tal - prøv igen");
                String input = keyboard.nextLine();
            }
        }
        return pris;
    }

    /**
     * En metode til indtastning af ny id. Metoden returnere ny id
     * til brug i andre metoder
     * @param long nyId
     * @return long nyId
     */
    private long inputNyId()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Skriv ny udlejningsid: ");
        long nyId = 0;
        boolean ok = false;
        while(!ok)
        {
            try
            {
                nyId = keyboard.nextLong();
                ok = true;
            }
            catch (Exception e)
            {
                System.out.println("Skriv kun tal - prøv igen");
                String input = keyboard.nextLine();
            }
        }
        return nyId;
    }  

    /**
     * En metode der finder en udlejning via id
     * @param long id
     */
    private void findUdlejning()
    {
        long id = inputId();
        udlejningCtr.findUdlejning(id);
    }

    /**
     * En metode der opretter en udlejning
     * @param String tidsperiode
     * @param String tidsperiode
     * @param String beskrivelse
     * @param int pris 
     */ 
    private void opretUdlejning()
    {
        long id = inputId();
        String tidsperiode = inputUdlejningTidsperiode();
        String beskrivelse = inputUdlejningBeskrivelse();
        int pris = inputUdlejningsPris();
    }

    /**
     * En metode der finder en udlejning via id og opdaterer oplysningerne for udlejningen
     * @param long id
     * @param long nyId
     * @param String tidsperiode
     * @param String beskrivelse
     * @param int pris 
     */
    private void opdaterUdlejning()
    {
        long id = inputId();
        long nyId = inputNyId();
        String tidsperiode = inputUdlejningTidsperiode();
        String beskrivelse = inputUdlejningBeskrivelse();
        int pris = inputUdlejningsPris();
        udlejningCtr.opdaterUdlejning(id, nyId, tidsperiode, beskrivelse, pris);
    }

    /**
     * En metode der finder en udlejning via id og fjerner udlejningen i systemet
     * @param long id
     */
    private void sletUdlejning()
    {
        long id = inputId();
        udlejningCtr.fjernUdlejning(id);
    }

    /**
     * En metode der printer alle udlejninger i systemet
     */
    private void listAllUdlejning()
    {
        System.out.println("\n");
        System.out.println(udlejningCtr.printUdlejningsKartotek()+"\n");
    }
}

